#ifndef _RC10_FINAL_H
#define _RC10_FINAL_H

#include "rc1.0_register.h"

class FinalAlphaFunctionStruct {
public:
	void Init(MappedRegisterStruct _g) { g = _g; }
	void ZeroOut();
	MappedRegisterStruct g;
};

class FinalRgbFunctionStruct {
public:
	void Init(MappedRegisterStruct _a, MappedRegisterStruct _b, MappedRegisterStruct _c, MappedRegisterStruct _d)
	{ a = _a; b = _b; c = _c; d = _d; }
	void ZeroOut();
	MappedRegisterStruct a;
	MappedRegisterStruct b;
	MappedRegisterStruct c;
	MappedRegisterStruct d;
};

class FinalProductStruct {
public:
	void Init(MappedRegisterStruct _e, MappedRegisterStruct _f) { e = _e; f = _f; }
	void ZeroOut();
	MappedRegisterStruct e;
	MappedRegisterStruct f;
};

class FinalCombinerStruct {
public:
	void Init(FinalRgbFunctionStruct _rgb, FinalAlphaFunctionStruct _alpha, int _clamp, FinalProductStruct _product)
	{ rgb = _rgb; alpha = _alpha; clamp = _clamp; product = _product; hasProduct = true;}
	void Init(FinalRgbFunctionStruct _rgb, FinalAlphaFunctionStruct _alpha, int _clamp)
	{ rgb = _rgb; alpha = _alpha; clamp = _clamp; hasProduct = false; product.ZeroOut();}

	int hasProduct;
	FinalProductStruct product;
	int clamp;
	FinalRgbFunctionStruct rgb;
	FinalAlphaFunctionStruct alpha;
	void Validate();
	void Invoke();
};

#endif
